如何在 kotlin Android Studio 中调用 Fast API

How to Call Fast API in kotlin Android Studio

提问人:Ayman Amjad 提问时间:5/17/2022 最后编辑:parsley72Ayman Amjad 更新时间:9/2/2022 访问量:1089

问:

我正在做一个项目,我创建了一个 API,我可以根据用户输入的位置从 twitter 获取趋势。现在我想在 android 中调用该 API。 它看起来像:enter image description here

我想在这里展示 GET 趋势: 获取趋势布局:

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        tools:context=".trends">
    
        <TextView
            android:id="@+id/profiletitle"
            android:layout_width="310dp"
            android:layout_height="46dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="52dp"
            android:fontFamily="monospace"
            android:text="Today's Trends"
            android:textAlignment="center"
            android:textColor="@color/Twit"
            android:textSize="25sp"
            android:textStyle="bold"
            tools:layout_editor_absoluteX="48dp"
            tools:layout_editor_absoluteY="29dp" />
    
        <EditText
            android:id="@+id/locationid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginStart="105dp"
            android:layout_marginTop="133dp"
            android:ems="10"
            android:hint="Enter your country"
            android:inputType="textPersonName" />
    
        <Button
            android:id="@+id/getdata"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="216dp"
            android:text="Get Trends" />
    
        <FrameLayout
            android:id="@+id/showtrends"
            android:layout_width="360dp"
            android:layout_height="492dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="310dp">
    
        </FrameLayout>
    
    
</RelativeLayout>

enter image description here

我需要你的帮助来告诉我如何在 kotlin 中做到这一点。我已经搜索了很多次,但未能找到可以将我的 Country 参数andriod 传递到 API 然后获得 json 结果的解决方案。您的回答将不胜感激。

我要显示的响应正文:

enter image description here

Android API Kotlin 参数传递 getmethod

评论

0赞 Sandesh Khutal 5/17/2022
您可以在 Framelayout 中使用带有 RecyclerView 的 Retrofit 或 Volley 网络库。
0赞 Ayman Amjad 5/17/2022
我正在使用它,但我无法将位置参数传递给我的 API 获取趋势方法并根据该位置参数获取 JSON 结果
0赞 Sandesh Khutal 5/17/2022
您当前使用的是哪个网络库?以及您的代码使用哪种架构?
0赞 Ayman Amjad 5/17/2022
我正在使用 retrofit 库来调用我的 API。你说的建筑是什么意思?
0赞 Sandesh Khutal 5/17/2022
架构模式 - 如 MVVM、MVC、MVP、MVI 等

答:

1赞 Sandesh Khutal 5/17/2022 #1

请尝试一次,并根据您的要求和其他相关更改进行 JSON,例如每次单击时的明文视图等......-

XML 文件

<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:gravity="center|top"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="52dp"
        android:fontFamily="monospace"
        android:text="Today's Trends"
        android:textAlignment="center"
        android:textSize="25sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/locationid"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:ems="10"
        android:hint="Enter your country"
        android:inputType="text" />

    <Button
        android:id="@+id/getData"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:text="Get Trends" />

    <TextView
        android:id="@+id/showData"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp"
        android:textSize="15sp" />
 
</androidx.appcompat.widget.LinearLayoutCompat>

类文件-

    public class MainActivity4 extends AppCompatActivity implements View.OnClickListener {
        Button getData;
        EditText locationId;
        TextView showData;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main4);
            locationId = findViewById(R.id.locationid);
            showData = findViewById(R.id.showData);
            getData = findViewById(R.id.getData);
            getData.setOnClickListener(this);
        }
    
        @SuppressLint("SetTextI18n")
        @Override
        public void onClick(View view) {
            int id = view.getId();
            if (id == R.id.getData) {
                String location = locationId.getText().toString().trim();
showData.setText("");
                if (location.isEmpty()) {
                    Toast.makeText(getApplicationContext(), "Please add Country", Toast.LENGTH_LONG).show();
                    return;
                }
    
                RequestQueue requestQueue;
                requestQueue = Volley.newRequestQueue(getApplicationContext());
                @SuppressLint("SetTextI18n") JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,
                        "https://twtsentiment-fastapi.herokuapp.com/get_trend?loc=" + location,
                        null, response -> {
                    Log.d("Response", response.toString());
    
                    try {
                        JSONArray jsonArray = response.getJSONArray("Trends");
                        for (int i = 0; i < jsonArray.length(); i++) {
                            showData.append("\n "+jsonArray.optString(i)+"\n ");
                            Log.d("TEXT", jsonArray.optString(i));
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
    
                }, error -> Log.d("myapp", "something went wrong"));
                requestQueue.add(jsonObjectRequest);
            }
        }
    }

评论

0赞 Ayman Amjad 5/17/2022
谢谢。您能否确认添加新条目时如何清除上一个屏幕?
0赞 Sandesh Khutal 5/17/2022
仅更新此代码 showData.setText(“”);if (location.isEmpty()) { Toast.makeText(getApplicationContext(), “Please add Country”, Toast.LENGTH_LONG).show();
0赞 Ayman Amjad 5/17/2022
如果我想在 Fragment 中实现它,我需要做哪些更改
0赞 Ayman Amjad 5/17/2022
给我错误:类型不匹配:推断的类型是趋势,但View.OnClickListener?是意料之中的.......在这一行绑定?.getData!.setOnClickListener(this)
0赞 Sandesh Khutal 5/17/2022
仅在 onclick 监听器中添加此行--- showData.setText(“”);