Ich entwickle eine Andriod App für den Zugriff auf die Datenbank mit Java-Servlet. Da ich sdk 23 verwende, sind einige frühere Module veraltet, daher verwende ich die URLconnection-Klasse, um eine Verbindung zu Servlet herzustellen. Aber durch Ausführen unter Code funktioniert meine App nicht mehr.Wie verbinde ich ein Servlet mit Android-App mit URLconnection.?
Die App baut auf der Aktivität der Navigationsschublade auf und der untere Code ist in einer Fragmentklasse implementiert. Und ja, ich habe Berechtigungen für das Netzwerk
package com.example.nirmal.gaminghub;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.os.AsyncTask;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.lang.Object;
public class GameList extends Fragment {
TextView gm_lst=(TextView)getView().findViewById(R.id.game_list);
Button show;
String str ="" ;
public GameList() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
new AsyncTask<String, String, String>() {
protected String doInBackground(String... url) {
try {
URL openUrl = new URL("http://localhost:8080/GamingHub/ShowDataServlet");
HttpURLConnection connection = (HttpURLConnection) openUrl.openConnection();
connection.setDoInput(true);
// Toast.makeText(getApplicationContext(),"hello",Toast.LENGTH_LONG).show();
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line = "";
StringBuilder getOutput = new StringBuilder();
while ((line = br.readLine()) != null) {
getOutput.append(line);
}
br.close();
str=line;
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
protected void OnPostExecute(String otpt)
{
gm_lst.setText(otpt);
}
}.execute();
gm_lst.setText(str);
return inflater.inflate(R.layout.fragment_game_list, container, false);
}
}
unten Code ist für Servlet, die perfekt funktioniert.
package com.gaming_hub;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShowDataServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, ClassNotFoundException, SQLException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/gaming_hub","root","");
String sql="SELECT * from games";
PreparedStatement ps=con.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
// DataOutputStream dout=new DataOutputStream();
while(rs.next())
{
out.println(rs.getString(1));
}
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (ClassNotFoundException ex) {
Logger.getLogger(ShowDataServlet.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(ShowDataServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (ClassNotFoundException ex) {
Logger.getLogger(ShowDataServlet.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(ShowDataServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
Was meinst du, es funktioniert nicht mehr? –
Wie erhalten wir ein Pop-up, Leider funktioniert Ihre App nicht mehr –
Wenn dies passiert, wird es eine Stack-Trace in der Debug-Konsole sein. Diese Information ist entscheidend, um zu bestimmen, woher das Problem stammt. –