草庐IT

Android Studio应用基础,手把手教你从入门到精通(小白学习)总结1 之 基础介绍 + intent + 常用控件

好喜欢吃红柚子 2024-03-18 原文

说在最前面:

这是我根据B站的教学视频整理的笔记,视频里面的代码都是自己手敲、经过调试而且没有错误的

 B站教学视频链接:(学完必会)Android studio基础,从入门到精通,学完小白也能会_哔哩哔哩_bilibili

总结2正在奋笔疾书ing~  未完待续


目录

一、基本应用

 build.gradle文件

修改APP的图标和名称

Log方法和LogCat窗口的使用

新建activity

创建布局文件

在布局中新建按钮

在活动中显示布局

在manifest.xml对活动进行注册

添加按钮

添加菜单

二、Intent实现活动跳转

1. 显式intent

2. 隐式Intent

2.1. 隐式初步应用

2.2. 隐式intent应用之访问外链

2.3. 隐式intent应用之调用系统拨号界面

3. Intent实现数据传递

使用intent的putExtra()方法进行数据传递

三、控件

1. TextView控件

2. button控件

3. EditText控件

3.1 输入框的显示

3.2 与button结合使用

4. ImageView控件

 4.1 布局文件中的图片控件显示

4.2 实现点击按钮更换图片应用

4.3 点击按钮转换图片应用

布局文件

活动文件

5. ProgressBar控件

 5.1 布局文件中的进度条显示

5.2 点击让进度条出现 / 消失

5.3 修改进度条样式和进度

四、Dialog对话框

1. AlertDialog提示信息

4.2 ProgressDialog提示信息


一、基本应用

 build.gradle文件

build.gradle(:app)文件中指定了所有相关的配置,如SDK版本,APP版本号和名称等(后续APP进行升级时会用到)

修改APP的图标和名称

在manifest.xml中修改APP的名字和图标,图标需要改icon和roundicon两个

Log方法和LogCat窗口的使用

在mainactivity.java中可以进行对log函数的调试,在logcat窗口中进行对所需信息的搜索

// 打印最琐碎的信息
        Log.v(TAG,"onCreate");
//  information,打印重要数据
        Log.i(TAG,"onCreate");
//  warning,打印警告信息
        Log.w(TAG,"onCreate");
//   error,打印错误信息
        Log.e(TAG,"onCreate");
// debug,打印调试信息
        Log.d(TAG,"onCreate");


新建activity

在与MainActivity同级目录下新建一个活动,选择empty activity


创建布局文件

在layout目录下创建新建布局,new layout recourse


在布局中新建按钮

添加高和宽的属性,修改按钮的文字内容

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <Button
        android:id="@+id/Button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="按钮1"></Button>


</androidx.constraintlayout.widget.ConstraintLayout>


在活动中显示布局

setContentView方法,使用R.layout.xxx进行引用定义的布局

setContentView(R.layout.first_layout);


在manifest.xml对活动进行注册

即对主活动进行添加等,需要添加如下的代码,

android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>


还可以对主活动的名称进行修改,如定义android:label="主界面"

 <activity
            android:name=".MainActivity"
            android:label="主界面"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


添加按钮

1. 在布局中添加按钮
在first_layout文件中:

<Button
        android:id="@+id/Button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/button1_name"></Button>

2. 在java中添加按钮,使用Toast方法弹出窗口
在main activity文件中:定义一个按钮

Button b1 = (Button)findViewById(R.id.Button1);
b1.setOnClickListener(new View.OnClickListener(){
    @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "你按痛我啦", Toast.LENGTH_SHORT).show();
            }
        });

添加菜单

1. 在包文件下新建一个名为menu的文件夹,在该文件夹下新建一个menu文件名为main,使用item标签为菜单下的两个子菜单设置id和内容

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/add_item"
        android:title="我是一个添加"></item>

    <item android:id="@+id/remove_item"
        android:title="我是一个删除"></item>
</menu>

2. 在MainActivity.java中重写两个方法,进行对菜单的显示和对应点击按钮后的弹窗

    //    重写onCreateOptionsMenu,设置菜单
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
//        显示创建的菜单是否显示
        return true;
    }

// 为菜单添加点击弹窗
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.add_item:
                Toast.makeText(this, "这是一个添加菜单", Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_item:
                Toast.makeText(this, "你确定要删除吗?", Toast.LENGTH_SHORT).show();
                break;
            default:
        }
        return true;
    }


二、Intent实现活动跳转

intent是意图,可以用于转换活动。

1. 显式intent

明确的指定想要跳转到的活动,因此称为显式intent,创建的intent对象传入2个参数:

  • 第1个参数 MainActivity.this 表示当前的activity
  • 第2个参数 SecondActivity.class 代表要跳转到的目标activity

在按钮点击事件中添加intent完成对主活动MainActivity和SecondActivity之间的跳转,然后使用startActivity方法进行活动的转换 

Button b1 = (Button)findViewById(R.id.Button1);
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "你按痛我啦", Toast.LENGTH_SHORT).show();
//                使用显示intent跳转活动
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });

2. 隐式Intent

2.1. 隐式初步应用

不明确指出想要跳转到的活动,在配置文件中通过<intent-filter>进行配置

  • 进入第二活动的配置区域,添加<intent-filter>标签,指明想要跳转到该活动跳转的name和category 
  • 分别为 <action android:name="jump_to_second_activity"></action>和
      <category android:name="android.intent.category.DEFAULT"></category>
<activity
            android:name=".SecondActivity"
            android:label="第二界面"
            android:exported="false">
            <intent-filter>
                <action android:name="jump_to_second_activity"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>

        </activity>
  • 在按钮点击事件处修改对应的click方法,新建Intent对象的构造方法的所需参数修改了,变成了想要跳转到的活动的name,即再上一步定义的"jump_to_second_activity"。
  • 系统会自动为该intent添加“android.intent.category.DEFAULT”的category,因此不需要再指定要跳转的标签。
 b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "你按痛我啦", Toast.LENGTH_SHORT).show();
//                使用显示intent跳转活动
//                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
//                使用隐式intent
                Intent intent = new Intent("jump_to_second_activity");

                startActivity(intent);
            }
        });

2.2. 隐式intent应用之访问外链

  • 在first_layout布局文件中新添加一个按钮,负责跳转到百度链接,然后在main活动中添加对应按钮b1_1的点击事件 ,效果如下所示。

  • 注意,使用Intent.ACTION_VIEW进行对intent对象的创建,然后调用setData方法,传入的参数为对应网址。 
Button b1_1 = (Button) findViewById(R.id.Button1_1);
        b1_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,"打开网页",Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://www.baidu.com"));
                startActivity(intent);
            }
        });

2.3. 隐式intent应用之调用系统拨号界面

把parse中的参数改成"tel:******"即可 

Button b1_2 = (Button) findViewById(R.id.Button1_2);
        b1_2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,"打开拨号界面",Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("tel:10086"));
                startActivity(intent);
            }
        });

3. Intent实现数据传递

使用intent的putExtra()方法进行数据传递

  • putExtra()进行数据保存

在主活动的点击跳转到第二个活动的按钮中进行字符串data的传输

1. 定义字符串data

2. 使用显式intent进行数据的传递,然后使用putExtra方法将数据存入intent中,该方法需要两个参数,一个是存入的数据名,一个是存入的数据值,存入的数据名为StringInformation,数据值为data的内容 

// 把java中的按钮和布局中的联系起来
        Button b1 = (Button)findViewById(R.id.Button1);
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "跳转到第二个活动", Toast.LENGTH_SHORT).show();

//                在向第二个活动转换的过程中传递一个字符串
                String data = "你好,第二个活动!";

//                使用显示intent跳转活动
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
//                把需要传递的数据存入intent中,第一个参数是传递的数据名称,第二个参数是取得的实际值内容
                intent.putExtra("StringInformation",data);

//                使用隐式intent
//                Intent intent = new Intent("jump_to_second_activity");
                //intent.addCategory("my_category");
                startActivity(intent);
            }
        });
  • getXxxExtra()进行数据取出

在活动二显示布局的语句后开始进行从intent中取出数据 

1.  使用getIntent方法定义一个intent对象

2.  因为要取得值是string型,所以使用getStringExtra方法,方法中传递的参数是在上面定义的数据的名称“StringInformation”

3. 使用logcat窗口进行信息打印,查看是否成功

//        新建一个获取数据的intent
        Intent intent = getIntent();
//        获取存再intent中的名为StringInformation的字符串
        String data =intent.getStringExtra("StringInformation");
//        在logcat窗口中打印对应信息
        Log.d("SecondActivity",data);

测试:打印成功

三、控件

1. TextView控件

新建一个empty activity,在main_activity布局文件中进行进行TextView控件属性的设置

  • android:gravity  设置文字的位置,center为居中显示
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="17sp"
        android:textColor="@color/purple_200"
        android:text="我是一行文字,欢迎来到textview的学习">
    </TextView>

</LinearLayout>

效果:

2. button控件

对按钮的使用我们已经非常熟悉了,这里新引入一个textAllCaps属性,由于Android studio会自动把按钮里的小写转换为大写字母,所以若需要保持小写,则把属性设置为false,从而可以保持小写字母。 

<Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello everyone! 我是一个按钮"
        android:textAllCaps="false">
    </Button>

在活动里可以进行对按钮点击的添加

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

        Button b = (Button) findViewById(R.id.button1);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                switch (view.getId()){
                    case R.id.button1:
//                        逻辑控制
                        break;
                    default:
                        break;
                }
            }
        });
    }

3. EditText控件

3.1 输入框的显示

hint属性显示输入框要显示的文字 

<EditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="快点给我的输入框里输入文字吧!">
    </EditText>

3.2 与button结合使用

在输入框中输入文字,点击按钮,在界面中弹出(toast方法)输入框中的相应内容 

  • 创建一个EditText对象
  • 使findViewById方法进行布局文件和java对象的联系
  •  在按钮点击的逻辑控制语句中添加如下代码
  • String inputText = editText.getText().toString();  getText()方法用来获取文本框中输入的文字内容,toString()方法用来将其转换为字符串类型。
  •  Toast.makeText(MainActivity.this, inputText, Toast.LENGTH_SHORT).show();  弹出对应内容
public class MainActivity extends AppCompatActivity {

//    创建一个输入框对象
    private EditText editText;

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

        Button b = (Button) findViewById(R.id.button1);

//       和按钮一样,使用findviewbyid 获取到输入框的实例
        editText = (EditText)findViewById(R.id.edit_text);

        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                switch (view.getId()){
                    case R.id.button1:
//                        逻辑控制
                        String inputText = editText.getText().toString();
                        Toast.makeText(MainActivity.this, inputText, Toast.LENGTH_SHORT).show();
                        break;
                    default:
                        break;
                }
            }
        });
    }
}

4. ImageView控件

 4.1 布局文件中的图片控件显示

  <ImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/img2">
    </ImageView>

4.2 实现点击按钮更换图片应用

准备工作:在drawable中放置两张资源图片,新建一个按钮b2

  • 新建一个imagView对象:  private ImageView imageView;
  •  获取imageview的id:
     imageView =(ImageView) findViewById(R.id.image_view);
  • 在按钮的点击事件中使用setImageResource()方法设置需要更换的图片,使用R.drawable.xxx引用 :imageView.setImageResource(R.drawable.img1);
package cn.edu.sdut.uipractice01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

//    创建一个输入框对象
    private EditText editText;
//    创建一个imageview对象
    private ImageView imageView;

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

        Button b1 = (Button) findViewById(R.id.button1);
        Button b2 = (Button) findViewById(R.id.button2);

//       和按钮一样,使用findviewbyid 获取到输入框的实例
        editText = (EditText)findViewById(R.id.edit_text);
//        获取imageview的id
        imageView =(ImageView) findViewById(R.id.image_view);

        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                switch (view.getId()){
                    case R.id.button1:
//                        逻辑控制
                        String inputText = editText.getText().toString();
                        Toast.makeText(MainActivity.this, inputText, Toast.LENGTH_SHORT).show();
                        break;
                    default:
                        break;
                }
            }
        });

        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                imageView.setImageResource(R.drawable.img1);
            }
        });
    }
}

 效果:

                    点击后-》       

4.3 点击按钮转换图片应用

要求:依次点击春夏秋冬四个按钮,显示对应的四张图片 

布局文件:

<?xml version="1.0" encoding="utf-8"?>

<!--最外层容器-->
<LinearLayout 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:orientation="vertical"
    tools:context=".MainActivity">

<!--    放按钮-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/b1"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="春"/>

        <Button
            android:id="@+id/b2"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="夏"/>

        <Button
            android:id="@+id/b3"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="秋"/>

        <Button
            android:id="@+id/b4"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="冬"/>


    </LinearLayout>

<!--    放图片-->
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <ImageView
            android:id="@+id/img1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/spring"
            android:scaleType="fitXY"/>
        <ImageView
            android:id="@+id/img2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/summer"
            android:visibility="invisible"
            android:scaleType="fitXY"/>
        <ImageView
            android:id="@+id/img3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/autumn"
            android:visibility="invisible"
            android:scaleType="fitXY"/>
        <ImageView
            android:id="@+id/img4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/winter"
            android:visibility="invisible"
            android:scaleType="fitXY"/>


    </FrameLayout>



</LinearLayout>

活动文件:

button的OnClickListener的三种实现方法: 

(159条消息) button的OnClickListener的三种实现方法_huiwolf2008的博客-CSDN博客

 此处点击事件的监听器使用并不是匿名类new onClickListener,而是让activity类实现onClickListener接口,然后重写其对应的方法onclick即可。

package cn.edu.sdut.myclass831;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button b1,b2,b3,b4;
    ImageView img1,img2,img3,img4;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         b1 = findViewById(R.id.b1);
         b2 = findViewById(R.id.b2);
         b3 = findViewById(R.id.b3);
         b4 = findViewById(R.id.b4);

         img1 = findViewById(R.id.img1);
         img2 = findViewById(R.id.img2);
         img3 = findViewById(R.id.img3);
         img4 = findViewById(R.id.img4);

        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
        b3.setOnClickListener(this);
        b4.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
//        获取点击的按钮的id值
        int id=view.getId();
//        首先隐藏所有图片
        hideImg();
        switch (id){
            case R.id.b1:
                img1.setVisibility(View.VISIBLE);
                break;
            case R.id.b2:
                img2.setVisibility(View.VISIBLE);
                break;
            case R.id.b3:
                img3.setVisibility(View.VISIBLE);
                break;
            case R.id.b4:
                img4.setVisibility(View.VISIBLE);
                break;
            default:
                break;

        }
    }

    protected void hideImg(){
        img1.setVisibility(View.INVISIBLE);
        img2.setVisibility(View.INVISIBLE);
        img3.setVisibility(View.INVISIBLE);
        img4.setVisibility(View.INVISIBLE);
    }

}

5. ProgressBar控件

 5.1 布局文件中的进度条显示

 <ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

5.2 点击让进度条出现 / 消失

控件的三个可见值的属性:visible  invisible gone

  •  在活动中新建进度条对象
  • 使用findviewbyid找到对应进度条
  • 在按钮点击事件中进行进度条显示或隐藏的判断与设置
b3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(progressBar.getVisibility()==view.GONE)
                    progressBar.setVisibility(view.VISIBLE);
                else
                    progressBar.setVisibility(view.GONE);
            }
        });

5.3 修改进度条样式和进度

1. 修改样式并设置进度条最大范围

  • style属性设置水平进度条
  • max属性设置最大值
<ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleHorizontal"
        android:max="100"
        />

2. 点击按钮增加进度条的值

 通过getProgress获取进度条的值,然后每次点击一次按钮,进度加10,使用setProgress设置更新后的进度条值。

b3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //            点击按钮设置可见性
//                if(progressBar.getVisibility()==view.GONE)
//                    progressBar.setVisibility(view.VISIBLE);
//                else
//                    progressBar.setVisibility(view.GONE);
                int prgress = progressBar.getProgress();
                prgress+=10;
                progressBar.setProgress(prgress);
            }
        });

 效果:

四、Dialog对话框

作用:用于提示用户重要内容/信息,可以屏蔽其他控件的交互能力。

1. AlertDialog提示信息

对话框无需在布局文件中进行创建,直接在活动中点击按钮的事件中创建即可,可套用以下模板,具体方法不再进行讲解。 

b4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
                dialog.setTitle("这里有一条重要信息");
                dialog.setMessage("请注意休息,不要久坐哦~");
                dialog.setCancelable(false);
//              为对话框按钮创建点击事件
                dialog.setPositiveButton("好的", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                });
//                显示对话框
                dialog.show();
            }
        });

效果:

4.2 ProgressDialog提示信息

在对话框中可以出现一个进度条。

使用方法与AlertDialog类似

b5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
                progressDialog.setTitle("加载进度");
                progressDialog.setMessage("正在加载中,请耐心等待~");
                progressDialog.setCancelable(true);
                progressDialog.show();
            }
        });

效果:    

 

有关Android Studio应用基础,手把手教你从入门到精通(小白学习)总结1 之 基础介绍 + intent + 常用控件的更多相关文章

  1. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  2. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  3. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  4. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  5. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  6. ruby-on-rails - 如何在 Gem 中获取 Rails 应用程序的根目录 - 2

    是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在

  7. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  8. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  9. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  10. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

随机推荐