Amazon web services 为什么在AsyncTask中引发NetworkOnMainThreadException?
各位。 我使用抽屉活动,使用片段更改内容,因此有PerfilFragment,例如:Amazon web services 为什么在AsyncTask中引发NetworkOnMainThreadException?,amazon-web-services,android-asynctask,amazon-dynamodb,networkonmainthread,Amazon Web Services,Android Asynctask,Amazon Dynamodb,Networkonmainthread,各位。 我使用抽屉活动,使用片段更改内容,因此有PerfilFragment,例如: public class PerfilFragment extends Fragment { final CurrentView currentView = new CurrentView(); @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable Vi
public class PerfilFragment extends Fragment {
final CurrentView currentView = new CurrentView();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_perfil, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (getActivity() != null) {
getActivity().setTitle(R.string.menu_perfil);
final CognitoCachingCredentialsProvider credentialsProvider;
if (getContext() != null) {
AWSConfiguration awsConfig = new AWSConfiguration(getContext());
credentialsProvider = new CognitoCachingCredentialsProvider(
getContext(),
awsConfig
);
currentView.setCredentialsProvider(credentialsProvider);
currentView.setView(view);
final FloatingActionButton fab = view.findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Insert().doInBackground(currentView);
}
});
}
}
}
}
CurrentView类型是一个内部类,也是一个插入类:
class当前视图{
私人CognitocachingCredentialsProviderCredentialsProvider;
私人视野;
CognitoCachingCredentialsProvider getCredentialsProvider(){
返回凭证提供者;
}
void setCredentialsProvider(CognitoCachingCredentialsProvider提供程序){
this.credentialsProvider=credentialsProvider;
}
查看getView(){
返回视图;
}
void setView(视图){
this.view=视图;
}
}
类插入扩展异步任务{
私有最终静态字符串TABLE=“perfil”;
@凌驾
受保护的表doInBackground(CurrentView…CurrentView){
AmazondynamodClient;
试一试{
dbClient=newamazondynamodbclient(currentView[0].getCredentialsProvider());
Table perfilTable=Table.loadTable(dbClient,Table);
Document perfilDocument=新文档();
final EditText perfilNome=currentView[0].getView().findViewById(R.id.perfil\u nome\u txt);
final EditText perfilDataNasc=currentView[0].getView().findViewById(R.id.perfil\u datanasc\u txt);
final EditText PerfilGrano=currentView[0].getView().findViewById(R.id.perfil\u Grano\u txt);
perfilDocument.put(“userId”,currentView[0]。getCredentialsProvider().GetCachedEntityId());
perfilDocument.put(“nome”,perfilNome.getText().toString());
perfilDocument.put(“datanasc”,perfilDataNasc.getText().toString());
perfilDocument.put(“慷慨”,perfildogro.getText().toString());
文档perfilInserido=perfilTable.putItem(perfilDocument);
if(perfilInserido.containsKey(“慷慨”)){
DynamoDBEntry perfilInseridoGenero=perfilInserido.get(“慷慨”);
if(perfilInseridoGenero!=null){
if(perfilSeridogenero.asString().equals(perfilGrando.getText().toString())){
小吃条
.制造(
currentView[0]。getView(),
“Perfil atualizado!”,
Snackbar.LENGTH\u LONG
)
.setAction(“Atualizar”,null)
.show();
}
}
}
返回性能;
}捕获(例外e){
Log.e(“异常”,e.getMessage(),e);
返回null;
}
}
}
异常在doInBackground方法内抛出,行为:
Table perfilTable=Table.loadTable(dbClient,Table)代码>
我遗漏了什么?AWS开发者论坛的用户awsvbk回答我:
您需要调用execute()方法,而不是doInBackground()方法。调用execute()将在后台线程中内部调用AsyncTask的doInBackground()方法
new Insert().execute(<PARAMS>)
new Insert().execute())
如果您仍然面临DynamoDB文档模型的任何其他问题
SDK,请在GitHub上为我们解决一个问题
AWS开发者论坛的用户awsvbk回答我:
您需要调用execute()方法,而不是doInBackground()方法。调用execute()将在后台线程中内部调用AsyncTask的doInBackground()方法
new Insert().execute(<PARAMS>)
new Insert().execute())
如果您仍然面临DynamoDB文档模型的任何其他问题
SDK,请在GitHub上为我们解决一个问题