android:显示来自维基百科文章的标题和文字

时间:2014-03-03 17:13:25

标签: android wikipedia android-json

我正在开发一个解析来自维基百科的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对象,对吗?如果我想显示该特定部分的标题和文本,如何将数据插入两个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;
}
}

但它没有按计划运作......

2 个答案:

答案 0 :(得分:1)

1)解析JSON个对象并检索titledata

2)在您的Textviewactivity中声明fragment后,textviews的文字设置如下

titleTextView.setText(title);
dataTextView.setText(data);

答案 1 :(得分:0)

要设置TextView的文字,您只需拨打aTextView.setText(someText);

即可

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