2

ウィキペディアの JSON オブジェクトを解析し、「タイトル」属性と「テキスト」属性の両方を表示するアプリに取り組んでいます。同様の例を探しましたが、ウィキペディアのページで直接機能するものはありません。

たとえば、ページからその情報を解析したい場合:

http://en.wikipedia.org/wiki/Plaza_de_España_(Madrid)

最初に、次のように作業するセクションを選択する必要があります。

http://en.wikipedia.org/w/api.php?format=jsonfm&action=parse&page=Plaza_de_España_(Madrid)

次に、JSON オブジェクトを解析しますよね。その特定のセクションのタイトルとテキストを表示したい場合、データを 2 つの TextView (1 つはタイトル用、もう 1 つは残りのテキスト用) に挿入するにはどうすればよいですか?

編集 私は次のコードを持っています:

package com.example.jsontest;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
private ProgressDialog pDialog;

// wikipedia URL
private static String url = "http://es.wikipedia.org/w/api.php?page=Plaza_de_España_(Madrid)&action=parse&section=6&format=jsonfm";
// JSON nose names
private static final String TAG_TITLE = "title";
private static final String TAG_TEXT = "text";
private static String TITLE,DATA;
TextView titleTextView, dataTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    titleTextView = (TextView)findViewById(R.id.titleTextView);
    dataTextView = (TextView)findViewById(R.id.dataTextView);
    new GetData().execute();
}

// Async action
private class GetData extends AsyncTask<Void,Void,Void>{
    @Override
    protected void onPreExecute(){
        super.onPreExecute();
        // show progress dialog
        pDialog = new ProgressDialog(MainActivity.this);
        pDialog.setMessage("Espera, por favor...");
        pDialog.setCancelable(false);
        pDialog.show();
    }
    @Override
    protected Void doInBackground(Void... arg0){
        // create service handler
        ServiceHandler sh = new ServiceHandler();
        // url request
        String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

        if(jsonStr!=null){
            try{
                JSONObject jsonObj = new JSONObject(jsonStr);
                TITLE = jsonObj.getString(TAG_TITLE);
                Toast.makeText(getBaseContext(), TITLE, Toast.LENGTH_SHORT).show();
                DATA = jsonObj.getString(TAG_TEXT);
                titleTextView.setText(TITLE.toString());
                dataTextView.setText(DATA.toString());
            }catch(JSONException e){
                e.printStackTrace();
            }
        }else{
            Toast.makeText(getBaseContext(), R.string.error, Toast.LENGTH_SHORT).show();
        }
        return null;
    }
    @Override
    protected void onPostExecute(Void result){
        super.onPostExecute(result);
        // dismiss progress dialog
        if(pDialog.isShowing()){
            pDialog.dismiss();
        }
    }
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
}

でも予定通りにいかない…

4

2 に答える 2

1

1) オブジェクトを解析し、とJSONを取得します。titledata

Textview2)あなたの中であなたを宣言した後、activityまたは次fragmentのようにテキストを設定しますtextviews

titleTextView.setText(title);
dataTextView.setText(data);
于 2014-03-03T17:23:17.213 に答える
0

のテキストを設定するにTextViewは、単に呼び出すことができますaTextView.setText(someText);

あなたができることは、特定の記事に含まれるセクションの数を数え、プログラムで x 個のTextViews (記事に含まれるセクションの数) を作成し、それらを JSON から解析したものに設定することです。

于 2014-03-03T17:21:42.027 に答える