简体   繁体   English

Android GUI不显示

[英]Android GUI does not show up

I am currently making an app for android and I have a problem where the UI on a new activity that I start from the main one does not show up. 我目前正在为Android开发一个应用,但遇到一个问题,即我从主要活动开始的一项新活动的UI无法显示。 I have no idea what the problem is. 我不知道是什么问题。

Here is my second activity's layout xml file: 这是我第二个活动的布局xml文件:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/TableLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.tabcards.android.Search" >

<TableRow
    android:id="@+id/tableRow1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1" >

    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
         >

        <TableLayout
            android:id="@+id/tableScrollView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:stretchColumns="yes"
            android:padding="5dp" 
            android:background="@color/gray">
        </TableLayout>
    </ScrollView>
</TableRow>

Here is my acitiviy's code: 这是我的帐户代码:

public class Search extends ActionBarActivity {
TableLayout tableScrollView;
String[] JSONExceptions = { "type", "em", "user_id", "id", "profilepic", "bg"};
String value;
JSONObject jObject;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search);

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        value = extras.getString("id");
    }
    System.out.println(value);
    tableScrollView = (TableLayout) findViewById(R.id.tableScrollView);
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {

                jObject = getJson("http://www.tabcards.com/req/androidapi/L2o30H8JlFMtFYHW3KLxkts20ztc5Be6Z6m6v315/json/"
                            + value);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    thread.start();
    try {
        thread.join();
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    new Thread(new Runnable() {

        @Override
        public void run() {
            try {
                createUI(jObject);
            } catch (JSONException e) {
                e.printStackTrace();
            }               
        }

    });

    System.out.println("complete");

}

private void createUI(JSONObject jObject) throws JSONException {

    Iterator<?> keys = jObject.keys();
    int absIndex = 0;
    while( keys.hasNext() ){
        String key = (String)keys.next();
        if(!contains2(JSONExceptions , jObject.get(key))){
            String value = jObject.getString(key);
            System.out.println("level 1");
            if(value!="") {
                insertElement(key + " : " + value, absIndex++);

            }
        }
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.search, menu);
    return true;
}

private void insertElement(String data, int i) {
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View newRow = inflater.inflate(R.layout.row, null, false);
    newRow.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT));

    TextView dataTextView = (TextView) newRow
            .findViewById(R.id.rowTextView);
    dataTextView.setText(data);
    System.out.println(dataTextView.getText().toString());
    tableScrollView.addView(newRow, i);

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

private InputStream downloadUrl(String urlString) throws IOException {
    URL url = new URL(urlString);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setReadTimeout(10000 /* milliseconds */);
    conn.setConnectTimeout(15000 /* milliseconds */);
    conn.setRequestMethod("GET");
    conn.setDoInput(true);
    // Starts the query
    conn.connect();
    return conn.getInputStream();
}

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

public static JSONObject getJson(String url){

    InputStream is = null;
    String result = "";
    JSONObject jsonObject = null;

    // HTTP
    try {           
        HttpClient httpclient = new DefaultHttpClient(); // for port 80 requests!
        HttpPost httppost = new HttpPost(url);
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
    } catch(Exception e) {
        return null;
    }

    // Read response to string
    try {           
        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"),8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
            System.out.println(line);
        }
        is.close();
        result = sb.toString().replace("[", "");                
    } catch(Exception e) {
        return null;
    }

    // Convert string to object
    try {
        jsonObject = new JSONObject(result.replace("]", ""));            
    } catch(JSONException e) {
        return null;
    }

    return jsonObject;

}

This is how I am creating the activity: 这就是我创建活动的方式:

Intent i = new Intent(getApplicationContext(), Search.class);
i.putExtra("id",searchEditText.getText().toString());
startActivity(i);

Tell me if you need any more info. 告诉我是否需要更多信息。

problem: 问题:

thread.join();

That problem is dreadlock you are waiting for thread to be done executing, which will put your UI thread to the Blocking state like Thread.Sleep() thus UI thread is waiting for your request to be done executing before it can display the layout in the screen. 这个问题是dreadlock您正在等待thread完成执行,这会将您的UI线程置于类似于Thread.Sleep()Blocking状态,因此UI线程正在等待您的请求执行完毕,然后它才能显示布局。屏幕。

from documentation : 文档

Like sleep, join responds to an interrupt by exiting with an InterruptedException.

solution: 解:

Use only one thread which will still wait for the request( createUI ) and executes your createUI method after. 仅使用一个线程,该线程仍将等待request( createUI ),并在之后执行您的createUI方法。

Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        try {

            jObject = getJson("http://www.tabcards.com/req/androidapi/L2o30H8JlFMtFYHW3KLxkts20ztc5Be6Z6m6v315/json/"
                        + value);
            createUI(jObject);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});
thread.start();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM