urlからtextviewに返すJSONオブジェクトを解析したいと思います。そのために、AsyncTaskを拡張してネットワーク接続を取得するクラスを使用しました。私の問題は、返す文字列の値をメインクラスに解析できないということです。ネットワークスレッドオブジェクトから別のオブジェクトにデータを解析するandroid
私のメインクラス
package com.example.janitha.condd;
import android.os.AsyncTask;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* Created by Janitha on 7/10/2016.
*/
public class Connection extends AsyncTask<String, Void, String> {
String finalData="123";
@Override
protected String doInBackground(String... urls) {
// params comes from the execute() call: params[0] is the url.
try {
return downloadUrl(urls[0]);
} catch (IOException e) {
return "Unable to retrieve web page. URL may be invalid.";
}
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
finalData=result;
}
public String downloadUrl(String myurl) throws IOException {
InputStream is = null;
int len = 50000;
try {
URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
// Starts the query
conn.connect();
int response = conn.getResponseCode();
is = conn.getInputStream();
String contentAsString = readIt(is, len);
return contentAsString;
} finally {
if (is != null) {
is.close();
}
}
}
public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {
Reader reader = null;
reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
reader.read(buffer);
return new String(buffer);
}
public String getFinalData() {
return finalData;
}
}
コードは、それは私が変数finalDataために初期化された値を意味している私に123として値を与える実行されるたびに、次のように
package com.example.janitha.condd;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
final String ur ="https://maps.googleapis.com/maps/api/place/textsearch/json?query=keells+super&location=6.849813513872538,79.90265075223242&key=AIzaSyDQ6fVTYb1_3MmD7j3Sei4CAhbZ_eIOphs";
String outcome=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv=(TextView)findViewById(R.id.text1) ;
Connection con=new Connection();
con.execute(ur);
outcome =con.getFinalData();
tv.setText(outcome);
}
}
私の接続クラスを次のように。私のコードで何が間違っていますか?
どこでコールバックする必要がありますか?私は本当にプログラミングのスレッド – jan
@新、私はコールバックの実装を追加しました、更新された答えを確認するために新しいです申し訳ありません。 –
ありがとう! – jan