2017-02-17 4 views
0

В настоящее время я сталкиваюсь с этой ошибкой. Я пробовал много способов попробовать и решить это, но безрезультатно. Пожалуйста, укажите мне, где пошло не так, и как я могу это решить. Благодарю.

Сообщение об ошибке:

    android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 

Вот класс Java:

package com.uploadtodatabasevts; 
 

 
import android.content.Intent; 
 
import android.support.v7.app.AppCompatActivity; 
 
import android.os.Bundle; 
 
import android.view.View; 
 
import android.widget.AdapterView; 
 
import android.widget.ListView; 
 
import android.widget.TextView; 
 

 
import com.amazonaws.auth.CognitoCachingCredentialsProvider; 
 
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper; 
 
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBQueryExpression; 
 
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.PaginatedQueryList; 
 
import com.amazonaws.regions.Regions; 
 
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; 
 

 
import java.util.ArrayList; 
 
import java.util.List; 
 

 
public class Advisor extends AppCompatActivity implements AdapterView.OnItemClickListener { 
 

 
    List<Outfit> outfitList; 
 

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

 
     Intent intent = getIntent(); 
 
     final String results = intent.getStringExtra("results"); 
 

 
     final TextView itemOneID = (TextView)findViewById(R.id.txtViewItemOneID); 
 
     final TextView itemOneDetail = (TextView)findViewById(R.id.txtViewItemOneDetail); 
 
     final TextView itemOnePrice = (TextView)findViewById(R.id.txtViewItemOnePrice); 
 

 

 
     ListView listView = (ListView)findViewById(R.id.listView); 
 
     outfitList = new ArrayList<Outfit>(); 
 
     Adapter adapter = new Adapter(this, outfitList); 
 
     listView.setAdapter(adapter); 
 
     listView.setOnItemClickListener(this); 
 

 
     final AmazonDynamoDBClient ddbClient = new AmazonDynamoDBClient(credentialsProvider); 
 
     final DynamoDBMapper mapper = new DynamoDBMapper(ddbClient); 
 

 
     // final Outfit outfitToFind = new Outfit(); 
 
     // outfitToFind.setItemOne_id("VT0056"); 
 

 

 
     Runnable runnable = new Runnable() { 
 
      public void run() { 
 
       //DynamoDB calls go here 
 

 
       Outfit selectedOutfit = mapper.load(Outfit.class, "22"); 
 

 
       selectedOutfit.getItemOne_id(); 
 
       selectedOutfit.getItemOne_detail(); 
 
       selectedOutfit.getItemOne_price(); 
 

 
       itemOneID.setText(selectedOutfit.getItemOne_id()); 
 
       itemOneDetail.setText(selectedOutfit.getItemOne_detail()); 
 
       itemOnePrice.setText(selectedOutfit.getItemOne_price()); 
 
       /* 
 
       DynamoDBQueryExpression queryExpression = new DynamoDBQueryExpression() 
 
         .withHashKeyValues(outfitToFind) 
 
         .withConsistentRead(false); 
 

 
       PaginatedQueryList<Outfit> result = mapper.query(Outfit.class, queryExpression); 
 
       result. 
 
       */ 
 
      } 
 
     }; 
 
     Thread mythread = new Thread(runnable); 
 
     mythread.start(); 
 

 

 

 
    } 
 

 
    @Override 
 
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
 

 
    } 
 
}

ответ

0

Все операции вид должен быть вызван на main thread, который является UI thread, изменение ваш Runnable до ниже

Runnable runnable = new Runnable() { 
     public void run() { 
      //DynamoDB calls go here 

      Outfit selectedOutfit = mapper.load(Outfit.class, "22"); 

      selectedOutfit.getItemOne_id(); 
      selectedOutfit.getItemOne_detail(); 
      selectedOutfit.getItemOne_price(); 
      new Handler(Looper.getMainLooper()).post(new Runnable() { 
       @Override 
       public void run() { 
        itemOneID.setText(selectedOutfit.getItemOne_id()); 
        itemOneDetail.setText(selectedOutfit.getItemOne_detail()); 
        itemOnePrice.setText(selectedOutfit.getItemOne_price()); 
       } 
      }); 
      /* 
      DynamoDBQueryExpression queryExpression = new DynamoDBQueryExpression() 
        .withHashKeyValues(outfitToFind) 
        .withConsistentRead(false); 

      PaginatedQueryList<Outfit> result = mapper.query(Outfit.class, queryExpression); 
      result. 
      */ 
     } 
    }; 
+0

Спасибо! Это решило мою проблему, но в настоящее время у меня возникают проблемы с передачей данных с первой страницы на эту страницу. Поскольку в настоящее время я использую qr-сканирование, я буду сканировать идентификатор элемента и передать его на эту страницу для извлечения данных. Я изменил mapper.load (Outfit.class, «22») на mapper.load (Outfit.class, результаты, но я столкнулся с этой ошибкой – SusanooJK

+0

com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMappingException: нулевой ключ найден для public java.lang.String com.uploadtodatabasevts.Tables.Item.getItem_id() – SusanooJK

+0

nvm Я решил ошибку. Я забыл добавить в одну строку в другом классе. – SusanooJK