java - 无法在txtView中获取获取的数据

标签 java android json

我正在尝试构建一个 Android 应用程序,我想在其中显示从 url 获取的数据。我尝试使用 JSON。它没有显示任何错误,但我无法得到结果。这就是我尝试的方法:-

//MainActivity.java

package com.example.login1;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.widget.TextView;
public class MainActivity extends Activity {

//URL to get JSON Array
private static String url = "http://demo.vtiger.com/webservice.php?operation=getchallenge&username=admin";
//JSON Node Names
private static final String TAG_RESULT = "result";
private static final String TAG_TOKEN = "token";
JSONArray token = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
  // Creating new JSON Parser
  JSONParser jParser = new JSONParser();
 // Getting JSON from URL
 JSONObject json = jParser.getJSONFromUrl(url);
 try {
  // Getting JSON Array
  token = json.getJSONArray(TAG_RESULT);
  JSONObject c = token.getJSONObject(0);
  // Storing  JSON item in a Variable
  String token = c.getString(TAG_TOKEN);
  //Importing TextView
  final TextView gettoken = (TextView)findViewById(R.id.lblToken);
  //Set JSON Data in TextView
  gettoken.setText(token);
  } catch (JSONException e) {
 e.printStackTrace();
 }
 }
}

这是我的 JSONParser 类:-

package com.example.login1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url) {
// Making HTTP request
try {
  // defaultHttpClient
  DefaultHttpClient httpClient = new DefaultHttpClient();
  HttpPost httpPost = new HttpPost(url);
  HttpResponse httpResponse = httpClient.execute(httpPost);
  HttpEntity httpEntity = httpResponse.getEntity();
  is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
  e.printStackTrace();
} catch (ClientProtocolException e) {
  e.printStackTrace();
} catch (IOException e) {
  e.printStackTrace();
}
try {
  BufferedReader reader = new BufferedReader(new InputStreamReader(
      is, "iso-8859-1"), 8);
  StringBuilder sb = new StringBuilder();
  String line = null;
  while ((line = reader.readLine()) != null) {
    sb.append(line + "n");
  }
  is.close();
  json = sb.toString();
} catch (Exception e) {
  Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
  jObj = new JSONObject(json);
} catch (JSONException e) {
  Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
 }
}

我是 android 和 JSON 新手,请帮助我。谢谢。

//AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.login1"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.login1.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

最佳答案

你的错误肯定是“android.os.NetworkOnMainThreadException”,因为你无法在UIThread中发出HTTP请求。使用AsyncTask。

更改此:

TextView gettoken;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }

    this.gettoken = (TextView)findViewById(R.id.lblToken);

    new AsyncTask<Void, Void, Void>() {

        String token;

        @Override
        protected Void doInBackground(Void... params) {

            // Creating new JSON Parser
            JSONParser jParser = new JSONParser();
            // Getting JSON from URL
            JSONObject json = jParser.getJSONFromUrl(url);
            try {
                // Getting JSON Array
                token = json.getJSONArray(TAG_RESULT);
                JSONObject c = token.getJSONObject(0);
                // Storing  JSON item in a Variable
                token = c.getString(TAG_TOKEN);
                //Importing TextView

            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            //Set JSON Data in TextView
            gettoken.setText(token);
        }
    }.execute();

 }

关于java - 无法在txtView中获取获取的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24609929/

相关文章:

java - GWT-Ext 中的 ThemeChanger

java - 即使卸载旧的 apk,Android APK 安装也失败

jquery - 使用基本 json 获取 twitter api

javascript - 查找对象属性的数量

Java读取文件并对每一行字符串进行排序

java - 填充 map Overlay

javascript - 存在适用于 Android 的 stringByEvaluatingJavaScriptFromString

java - Eclipse 错误, "The selection cannot be launched, and there are no recent launches"

Android Studio Cmake 无法确定目标的链接器语言

javascript - 如何获取数据迭代Json?