Android 앱을 서버에 연결하려고하는데 오류가 발생하고 무엇이 잘못되었는지 알 수 없습니다. 여기 Android의 서버 데이터베이스에 연결
내 MainActivity 클래스입니다 :public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
JsonReader jsonReader=new JsonReader(new JsonReader.AsyncResponse() {
@Override
public void processfinish(JSONObject output) {
Gson gson=new Gson();
String message=gson.toJson(output);
Toast.makeText(getApplicationContext(),"this is "+message,Toast.LENGTH_LONG).show();
}
});
jsonReader.execute();
} catch (IOException e) {
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
}
}
이 내 JsonReader 클래스입니다 : How to get the result of OnPostExecute() to main activity because AsyncTask is a separate class?
그리고 내 PHP 서버 코드 :이 가이드를 사용하여 AsyncResponse을 만들어
public class JsonReader extends AsyncTask<String,String,JSONObject>{
final static String myurl="http://example.com";
public interface AsyncResponse{
void processfinish(JSONObject output);
}
public AsyncResponse delegate = null;
public JsonReader(AsyncResponse delegate){
this.delegate = delegate;
}
public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
InputStream is = new URL(url).openStream();
try {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
JSONObject json = new JSONObject(jsonText);
return json;
}
finally {
is.close();
}
}
@Override
protected JSONObject doInBackground(String... strings) {
try {
JSONObject s = readJsonFromUrl(myurl);
return s;
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
super.onPostExecute(jsonObject);
delegate.processfinish(jsonObject);
}
}
:
<?php
$dbhost = "myhost";
$dbuser = "myuser";
$dbname = "myname";
$dbpass = "mypassword";
$connect_db = mysql_connect ($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname,$connect_db);
if ($connect_db){
$result= mysql_query("SELECT * FROM `ask` ",$connect_db)or die(mysql_error());
while($row = mysql_fetch_array($result))
{
$qa=new StdClass();
$qa->Question=$row['Question'];
$qa->Answer=$row['Answer'];
$qa->Answer2=$row['Answer2'];
$qa->Answer3=$row['Answer3'];
$qa->Answer4=$row['Answer4'];
echo "<br />";
$rses=json_encode($qa);
echo $rses;
}
}else{
echo "error in connecting db";
}
?>
내 앱을 시작하면 "this is null"이라고 표시되지만 브라우저에서 PHP 코드를 열면 데이터가 올바르게 표시됩니다. 무엇이 문제입니까?
업데이트 :
내가 다른 URL과 그 일을 사용했다. 그래서 문제가 내 PHP codes.i에있는 echo "<br />";
을 제거하고 브라우저에서 열었습니다. {"Question":"question","Answer":"a","Answer2":"b","Answer3":"c","Answer4":"d"}
json 형식에는 전문적이지 않지만 올바른 형식이 아닌 것으로 생각합니다.이 문제를 해결할 수 있습니까?
당신이 어떤 오류를받을 수 있나요 단지
toString
있도록, 당신은output
로 된 JSONObject가필요가 없다? –
응용 프로그램이 크래시없이 컴파일하고 "this is null"이라는 텍스트로 축배를 보여 주지만 server.and의 json 데이터와 "E/Surface : getSlotFromBufferLocked : unknown buffer : 0xeb1cb8a0"이 표시된 logcat에 "this is" 그것을 위해 안드로이드 6.0.0 버그가 보이지만 안드로이드 4.4.2에서 테스트 한 결과는 같았다. –
당신의 머큐리가 말 그대로 * http : // example.com이 아니라고 생각하고 있습니다. 실제로 인터넷에서 또는 적어도 장치가 연결된 네트워크에서 확인할 수 있고 도달 할 수있는 실제 URL입니까? – alzee