2

我正在开发一个从 Wikipedia 解析 JSON 对象并显示“标题”和“文本”属性的应用程序。我已经寻找过类似的示例,但没有一个可以直接与 Wikipedia 页面一起使用。

例如,如果我想从页面解析该信息:

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 对象,对吧?如果我想显示该特定部分的标题和文本,如何将数据插入两个 TextView(一个用于标题,另一个用于剩余文本)?

编辑 我有以下代码:

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

2)在您声明Textviewactivityfragment设置如下文本textviews

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

要设置 aTextView的文本,您只需调用aTextView.setText(someText);

您可以做的是计算某篇文章有多少个部分,以编程方式创建 x many TextView(对于文章有多少个部分),然后将它们设置为您从 JSON 解析的内容。

于 2014-03-03T17:21:42.027 回答