2015-12-02 48 views
1

所以我想从一个网站,它看起来像这样无法打印JSON对象的字符串在android系统的TextView

[{"name":"Painting"},{"name":"Painting or varnishing doors"},{"name":"Painting or varnishing frames"},{"name":"Varnishing floors"},{"name":"Picking old wallpaper"},{"name":"Painting the facade"},{"name":"professional athlete"}] 

我只是想获取字符串“绘画”第一的JSONObject获取JSON字符串。

这里是我的MainActivity.java代码

package mobiletest.pixelapp.com.mobiletest; 


import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.widget.TextView; 

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

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 

import model.Cup; 

public class MainActivity extends AppCompatActivity { 
    private TextView textView; 
    private String myString; 
    private String anotherString; 
    private String myVar; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    textView = (TextView)findViewById(R.id.textView); 
    Cup myCup = new Cup(); 
    String newString = myCup.myMethod(); 

    try { 
     JSONArray jsonArray = new JSONArray(newString); 
     JSONObject jsonObject = jsonArray.getJSONObject(0); 
     Log.v("Key",jsonObject.getString("name")); 
     textView.setText(jsonObject.getString("name")); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    } 
    } 

这是我的Java类文件cup.java

package model; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 

/** 
* Created by pruthvi on 12/2/2015. 
*/ 
public class Cup { 
    public String myMethod() 
    { 
     String output = getUrlContents("http://xyz.co/tests/android-query.php"); 
     return output; 
    } 

    private static String getUrlContents(String theUrl) 
    { 
     StringBuilder content = new StringBuilder(); 

     // many of these calls can throw exceptions, so i've just 
     // wrapped them all in one try/catch statement. 
     try 
     { 
      // create a url object 
      URL url = new URL(theUrl); 

      // create a urlconnection object 
      URLConnection urlConnection = url.openConnection(); 

      // wrap the urlconnection in a bufferedreader 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 

      String line; 

      // read from the urlconnection via the bufferedreader 
      while ((line = bufferedReader.readLine()) != null) 
      { 
       content.append(line + "\n"); 
      } 
      bufferedReader.close(); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     return content.toString(); 
    } 
} 

现在的问题,当我运行这段代码与Java,我很容易能够打印画从JSONObject,但是当我尝试通过设置我的TextView的文本来运行它作为一个Android视图时,我得到一些奇怪的system.err

12-02 14:06:26.809 19250-19250/mobiletest.pixelapp.com.mobiletest D/libc: [NET] getaddrinfo hn 10, servname NULL, ai_family 0+ 
12-02 14:06:26.809 19250-19250/mobiletest.pixelapp.com.mobiletest W/System.err:  at java.net.InetAddress.lookupHostByName(InetAddress.java:393) 
12-02 14:06:26.809 19250-19250/mobiletest.pixelapp.com.mobiletest W/System.err:  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:244) 
12-02 14:06:26.809 19250-19250/mobiletest.pixelapp.com.mobiletest W/System.err:  at java.net.InetAddress.getAllByName(InetAddress.java:219) 

我是java和android的新手,截至目前我只想从远程服务器文件和数据库获取数据。

在此先感谢

+0

您的服务器名称值为null ..检查值 – sud

+0

同样给定的URL是给404错误.. –

+0

尝试运行你的服务器端代码里面的子线程不在主线程 – sud

回答

0

看看这个例子,它会给你一个想法

AsyncTask<Void, Void, Void> asyncLoad = new AsyncTask<Void, Void, Void>() 
     { 
      @Override 
      protected Void doInBackground(Void... params) 
      { 
       URL url = new URL("http://www.omdbapi.com/?i=&t=" 
         + TITLE); 
       String URL2="http://www.omdbapi.com/?i=&t=saw"; 
       Log.d("URL content", url.toString()); 
       HttpURLConnection urlConnection = (HttpURLConnection) url 
         .openConnection(); 
       Log.d("URL content", "register URL"); 
       urlConnection.connect(); 
       Log.d("URL connection", "establish connection"); 

       return null; 
      } 

      @Override 
      protected void onPostExecute(Void result) 
      { 
       super.onPostExecute(result); 
      } 
     }; 

     asyncLoad.execute(); 
+0

在asynctask中做你的服务代码 – sud

0

不喜欢在onCrate方法

try { 
    JSONArray jsonArray = new JSONArray(newString); 
for (int i = 0; i < jsonArray.length(); i++) { 
    JSONObject jsonObject = jsonArray.getJSONObject(i); 
    String name = jsonObject.getString("name") 
    textView.setText(name));} 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

它将集名称的TextView。 乐意帮助和快乐编码

+0

如果您看到JSON字符串,您应该找到所有具有相同关键字“name”的对象。那么我如何在for循环中运行它并设置文本?当我在我的主要xml文件中创建一个TextView时 –

+0

如果您必须显示json数组的所有项目,那么您必须使用listView来显示所有名称。你究竟想要做什么? – Shane

0

你不能做网络任务UI线程。 因此

String newString = myCup.myMethod(); 

工作不正常。

这些错误的主要原因与线程上下文有关。

如果你想用android做网络任务,使用异步任务或其他网络库(我个人推荐retrofit)。

0
try 
    { 
    JSONArray jsonArray = new JSONArray(newString); 

    if(jarray.length()>0){ 

    String name = jarray.getJSONObject(0).getString("name"); 
    displayName(name); //new method 
    }catch(Exception e){ 
} 

定义方法显示名(字符串)这样外面的onCreate()

public void displayName(final String name){ 

    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 

     textView.setText(jsonObject.getString("name")); 

     } 
    }); 
}